"""
@author: Charles Tim Garrocho
@contact: ctgarrocho@gmail.com
@copyright: (C) 2012-2012 Python Software Open Source
"""

from smtplib import SMTP
from re import findall
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage

SERVIDORES = dict([('hotmail', 'smtp.live.com'), ('live', 'smtp.live.com'), ('yahoo', 'smtp.mail.yahoo.fr'), ('gmail', 'smtp.gmail.com')])

class Email(object):
    """
    Esta classe permite o envio de e-mail com uma imagem anexada. A classe suporta hotmail, yahoo e gmail.
    """

    def __init__(self, remetente, destinatario):
        """
        O construtor cria o e-mail e adiciona no cabecalho do e-mail o remetente e o destinatario.
        """
        self.remetente = remetente
        self.destinatario = destinatario
        self.email = MIMEMultipart('related')
        self.corpoMensagem = MIMEMultipart('alternative')
        self.email['From'] = remetente
        self.email['To'] = destinatario
        self.servidorEmail = SMTP(SERVIDORES[findall(u'@(.*?)\.', remetente)[0]], 587)
        
    def enviarEmail(self, titulo, texto, enderecoImagem, senha):
        """
        Envia o e-mail. Recebe como argumento titulo, texto e o endereco da imagem que sera anexada no corpo da mensagem.
        """
        self.corpoMensagem.attach(MIMEText(texto))
        self.email['Subject'] = titulo
        self.email.attach(self.corpoMensagem)
        arqImg = open(enderecoImagem, 'rb')
        imagem = MIMEImage(arqImg.read())
        arqImg.close()
        
        imagem.add_header('Content-ID', '<image1>')
        self.email.attach(imagem)
        
        self.servidorEmail.ehlo()
        self.servidorEmail.starttls()
        self.servidorEmail.ehlo()
        self.servidorEmail.login(self.remetente, senha)
        self.servidorEmail.sendmail(self.remetente, self.destinatario, self.email.as_string())
        self.servidorEmail.close()